package controllers;

import java.text.ParseException;
import java.util.*;

import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import play.*;
import models.*;
import views.html.pageErreurConnexion;
import views.html.ConsoleAdmin.*;

/**
 * Manage a database of userQcms
 */
public class AdminUtilisateurQcm extends Controller {

	/**
	 * This result directly redirect to application home.
	 */
	public static Result GO_HOME = redirect(routes.AdminUtilisateurQcm
			.listUtilisateurQcm(0, "id_utilisateur_qcm", "asc", ""));

	/**
	 * Handle default path requests, redirect to userQcms list
	 */
	public static Result indexUtilisateurQcm() {
		if (Application.estAdmin()) {
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the paginated list of userQcms.
	 * 
	 * @param page
	 *            Current page number (starts from 0)
	 * @param sortBy
	 *            Column to be sorted
	 * @param order
	 *            Sort order (either asc or desc)
	 * @param filter
	 *            Filter applied on userQcm names
	 */
	public static Result listUtilisateurQcm(int page, String sortBy,
			String order, String filter) {
		if (Application.estAdmin()) {
			return ok(listUtilisateurQcm.render(
					UtilisateurQcm.page(page, 10, sortBy, order, filter),
					sortBy, order, filter));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'edit form' of a existing UtilisateurQcm.
	 * 
	 * @param id
	 *            Id of the userQcm to edit
	 */
	public static Result editUtilisateurQcm(Long id) {
		if (Application.estAdmin()) {
			Form<UtilisateurQcm> userQcmForm = form(UtilisateurQcm.class).fill(
					UtilisateurQcm.findById(id));
			return ok(editUtilisateurQcm.render(id, userQcmForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'edit form' submission
	 * 
	 * @param id
	 *            Id of the userQcm to edit
	 */
	public static Result updateUtilisateurQcm(Long id) throws ParseException {
		if (Application.estAdmin()) {
			Form<UtilisateurQcm> userQcmForm = form(UtilisateurQcm.class)
					.bindFromRequest();
			if (userQcmForm.hasErrors()) {
				return badRequest(editUtilisateurQcm.render(id, userQcmForm));
			}

			DynamicForm filledForm = form().bindFromRequest();

			if (filledForm.get("date") != null)
				userQcmForm.get().setDate(
						Utile.stringToDate(filledForm.get("date")));

			userQcmForm.get().update(id);
			Logger.debug("Mise à jour userQcm "
					+ userQcmForm.get().getIdUtilisateurQcm() + " par userQcm "
					+ session().get("id"));
			flash("success", "UtilisateurQcm "
					+ userQcmForm.get().getIdUtilisateurQcm()
					+ " has been updated");
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'new userQcm form'.
	 */
	public static Result createUtilisateurQcm() {
		if (Application.estAdmin()) {
			Form<UtilisateurQcm> userQcmForm = form(UtilisateurQcm.class);
			return ok(createUtilisateurQcm.render(userQcmForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'new userQcm form' submission
	 */
	public static Result saveUtilisateurQcm() throws ParseException {
		if (Application.estAdmin()) {
			Form<UtilisateurQcm> userQcmForm = form(UtilisateurQcm.class)
					.bindFromRequest();
			if (userQcmForm.hasErrors()) {
				return badRequest(createUtilisateurQcm.render(userQcmForm));
			}
			DynamicForm filledForm = form().bindFromRequest();

			if (filledForm.get("date") != null)
				userQcmForm.get().setDate(
						Utile.stringToDate(filledForm.get("date")));

			userQcmForm.get().save();
			Logger.debug("Création userQcm "
					+ userQcmForm.get().getIdUtilisateurQcm() + " par userQcm "
					+ session().get("id"));
			flash("success", "UtilisateurQcm "
					+ userQcmForm.get().getIdUtilisateurQcm()
					+ " has been created");
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle userQcm deletion
	 */
	public static Result deleteUtilisateurQcm(Long id) {
		if (Application.estAdmin()) {
			UtilisateurQcm utilisateurQcm = UtilisateurQcm.findById(id);
			flash("success", "UtilisateurQcm has been deleted");
			Logger.debug("Suppression userQcm "
					+ utilisateurQcm.getIdUtilisateurQcm() + " par userQcm "
					+ session().get("id"));
			UtilisateurQcm.delete(id);
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

}
